package adaboostcn;

import features.Features;
import adaboostcn.util.Util;

public class Adaboost {
	
	
	private  Imagem[] imagens;	
	private int nPositivas;
	private int nNegativas;
	private Imagem[] imgValidar;
	private double taxaFP;
	private double taxaAcerto;
	public Imagem[] getImgValidar() {
		return imgValidar;
	}



	public void setImgValidar(Imagem[] imgValidar) {
		this.imgValidar = imgValidar;
	}



	public int getnPositivasValidar() {
		return nPositivasValidar;
	}



	public void setnPositivasValidar(int nPositivasValidar) {
		this.nPositivasValidar = nPositivasValidar;
	}



	public int getnNegativasValidar() {
		return nNegativasValidar;
	}



	public void setnNegativasValidar(int nNegativasValidar) {
		this.nNegativasValidar = nNegativasValidar;
	}



	public int getTamanhoCascata() {
		return tamanhoCascata;
	}



	public void setTamanhoCascata(int tamanhoCascata) {
		this.tamanhoCascata = tamanhoCascata;
	}



	public Features[] getFeatures() {
		return features;
	}



	public void setFeatures(Features[] features) {
		this.features = features;
	}

	private int nPositivasValidar;
	private int nNegativasValidar;
	private double[] pesos;
	private int tamanhoCascata;
	private Features features[];
	
	//private int nCassificadoresPorEstagio;
	//polaridade = 1, ou seja, as imagens positivas sao classificadas ABAIXO do limiar
	public Adaboost(int _tamanhoCascata, double _fp, double _acerto) throws Exception{
		
		this.tamanhoCascata = _tamanhoCascata;
		this.taxaAcerto = _acerto;
		this.taxaFP = _fp;
		this.features = new Features[_tamanhoCascata];
		//carrega imagens de treinamento
		carregaImagens();
		carregaImagensValidar();
		
		
		
		
	}
	
	

	public void carregaImagens() throws Exception{
		
		String filesListPos[] = Util.listaArquivos(Util.caminhoPositivas);
		String filesListNeg[] = Util.listaArquivos(Util.caminhoNegativas);
		nPositivas = filesListPos.length;
		nNegativas = filesListNeg.length;
		
		imagens = new Imagem[nPositivas+nNegativas];
		for(int i = 0; i<filesListNeg.length;i++){			
			imagens[i] = new Imagem(Util.lerImagem(Util.caminhoNegativas + '/' + filesListNeg[i]), 0);
		}
		for(int i = nNegativas; i<imagens.length;i++){			
			imagens[i] = new Imagem(Util.lerImagem(Util.caminhoPositivas + '/' + filesListPos[i]), 1);
		}		
	}
	
public void carregaImagensValidar() throws Exception{
		
		String filesListPos[] = Util.listaArquivos(Util.caminhoPositivasValidar);
		String filesListNeg[] = Util.listaArquivos(Util.caminhoNegativasValidar);
		nPositivasValidar = filesListPos.length;
		nNegativasValidar = filesListNeg.length;
		
		imgValidar = new Imagem[nPositivasValidar+nNegativasValidar];
		for(int i = 0; i<filesListNeg.length;i++){			
			imgValidar[i] = new Imagem(Util.lerImagem(Util.caminhoNegativasValidar + '/' + filesListNeg[i]), 0);
		}
		for(int i = nNegativas; i<imagens.length;i++){			
			imgValidar[i] = new Imagem(Util.lerImagem(Util.caminhoPositivasValidar + '/' + filesListPos[i]), 1);
		}		
	}
	
	public Imagem[] getImagens() {
		return imagens;
	}

	public void setImagens(Imagem[] imagens) {
		this.imagens = imagens;
	}

	public int getnPositivas() {
		return nPositivas;
	}

	public void setnPositivas(int nPositivas) {
		this.nPositivas = nPositivas;
	}

	public int getnNegativas() {
		return nNegativas;
	}

	public void setnNegativas(int nNegativas) {
		this.nNegativas = nNegativas;
	}

	public double[] getPesos() {
		return pesos;
	}

	public void setPesos(double[] pesos) {
		this.pesos = pesos;
	}



	public void setTaxaFP(double taxaFP) {
		this.taxaFP = taxaFP;
	}



	public double getTaxaFP() {
		return taxaFP;
	}



	public void setTaxaAcerto(double taxaAcerto) {
		this.taxaAcerto = taxaAcerto;
	}



	public double getTaxaAcerto() {
		return taxaAcerto;
	}
	
}
